package cn.itcast.dao;

import cn.itcast.domain.Goods;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository("goodsDao")
public interface IGoodsDao {


    /**
     * 查询所有捐赠物资
     * @return
     */
    List<Goods> findAllDonateGoods();

    /**
     * 插入物资
     * @param goods
     */
    void insertDonateGoods(Goods goods);

    /**
     * 插入捐赠者关联表的id对
     * @param DonateGoodsId
     * @param DonatorId
     */
    void insertDonateIdPair(@Param("goods_id")Integer DonateGoodsId,@Param("donator_id")String DonatorId);

    /**
     * 更新捐赠物资
     * @param goods
     */
    void updateDonateGoods(Goods goods);

    /**
     * 根据捐赠物资id查找捐赠者id
     * @param id
     * @return
     */
    Integer findDonatorIdByDonateGoodsId(Integer id);

    /**
     * 根据id删除捐赠物资
     * @param id
     */
    void deleteDonateGoodsById(Integer id);

    /**
     * 删除捐赠关联表中id对
     * @param id
     */
    void deleteDonateIdPair(Integer id);

    /**
     * 根据id查找捐赠者的出现次数
     * @param donatorId
     * @return
     */
    Integer findDonatorCountById(Integer donatorId);

    /**
     * 根据id查找捐赠物资
     * @param id
     * @return
     */
    Goods findDonateGoodsById(Integer id);

    /**
     * 查询所有接收物资
     * @return
     */
    List<Goods> findAllRecieveGoods();

    /**
     * 根据id查找接收物资
     * @param id
     * @return
     */
    Goods findRecieveGoodsById(Integer id);

    /**
     * 插入接收物资
     * @param goods
     */
    void insertRecieveGoods(Goods goods);

    /**
     * 更新接收物资
     * @param goods
     */
    void updateRecieveGoods(Goods goods);

    /**
     * 插入接收物资id对
     * @param insertedRecieveGoodsId
     * @param insertedRecieverId
     */
    void insertRecieveIdPair(@Param("goods_id")Integer insertedRecieveGoodsId,@Param("reciever_id")String insertedRecieverId);

    /**
     * 根据接收物资id查找接收者id
     * @param id
     * @return
     */
    Integer findRecieverIdByRecieveGoodsId(Integer id);

    /**
     * 根据id删除接收物资
     * @param id
     */
    void deleteRecieveGoodsById(Integer id);

    /**
     * 删除接收关联表id对
     * @param id
     */
    void deleteRecieveIdPair(Integer id);

    /**
     * 根据id查找接收者出现的次数
     * @param recieverId
     * @return
     */
    Integer findRecieveCountById(Integer recieverId);

    /**
     * 模糊查询捐赠物资
     * @param key
     * @return
     */
    List<Goods> findDonateGoodsByKey(@Param("key")String key);

    /**
     * 模糊查询接收物资
     * @param key
     * @return
     */
    List<Goods> findRecieveGoodsByKey(@Param("key")String key);
}
